package com.javarush.test.level17.lesson10.bonus02;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;

/* CRUD 2
CrUD Batch - multiple Creation, Updates, Deletion
!!!РЕКОМЕНДУЕТСЯ выполнить level17.lesson10.bonus01 перед этой задачей!!!

Программа запускается с одним из следующих наборов параметров:
-c name1 sex1 bd1 name2 sex2 bd2 ...
-u id1 name1 sex1 bd1 id2 name2 sex2 bd2 ...
-d id1 id2 id3 id4 ...
-i id1 id2 id3 id4 ...
Значения параметров:
name - имя, String
sex - пол, "м" или "ж", одна буква
bd - дата рождения в следующем формате 15/04/1990
-с  - добавляет всех людей с заданными параметрами в конец allPeople, выводит id (index) на экран в соответствующем порядке
-u  - обновляет соответствующие данные людей с заданными id
-d  - производит логическое удаление всех людей с заданными id
-i  - выводит на экран информацию о всех людях с заданными id: name sex bd

id соответствует индексу в списке
Формат вывода даты рождения 15-Apr-1990
Все люди должны храниться в allPeople
Порядок вывода данных соответствует вводу данных
Обеспечить корректную работу с данными для множества нитей (чтоб не было затирания данных)
Используйте Locale.ENGLISH в качестве второго параметра для SimpleDateFormat
*/

public class Solution {
    public volatile static List<Person> allPeople = new ArrayList<Person>();
    static {
        allPeople.add(Person.createMale("Иванов Иван", new Date()));  //сегодня родился    id=0
        allPeople.add(Person.createMale("Петров Петр", new Date()));  //сегодня родился    id=1
    }

    public static void main(String[] args) throws IOException, ParseException
    {
        if (args.length < 2)
            return;

        if (args[0].equals( "-c")&&(((args.length)-1)%3==0))
        {

            for(int i=1; i<args.length; i=i+3)
            {
                String[] argsOne={null,args[i],args[i+1],args[i+2]};
                addPeople(argsOne);
            }


        }

        else if (args[0].equals("-u")&&(((args.length)-1)%4==0))
        {
            for(int i=1; i<args.length; i=i+4)
            {
                String[] argsOne={null,args[i],args[i+1],args[i+2],args[i+3]};
                updatePeople(argsOne);
            }
        }

        else if (args[0].equals("-d")&&args.length>=2)
        {
            for (int i=1; i<args.length; i++ )
            {
                deletePeople(args[i]);
            }
        }

        else if (args[0].equals("-i")&&args.length>=2)
        {
            for (int i=1; i<args.length; i++ )
            {
                info(args[i]);
            }
        }




    }



    public static synchronized void updatePeople(String[] args) throws ParseException
    {
        SimpleDateFormat date=new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH);
        int n=Integer.parseInt(args[1]);
        allPeople.get(n).setName(args[2]);
        allPeople.get(n).setSex(sexChange(args[3]));
        allPeople.get(n).setBirthDay(date.parse(args[4]));
    }

    public static synchronized void deletePeople(String arg)
    {
        int n=Integer.parseInt(arg);
        allPeople.get(n).setName(null);
        allPeople.get(n).setSex(null);
        allPeople.get(n).setBirthDay(null);

    }

    public static void info(String arg)
    {
        SimpleDateFormat dateOut=new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);
        int n=Integer.parseInt(arg);

        String s="";
        if (allPeople.get(n).getSex().equals(Sex.MALE)) s="м";
        else if (allPeople.get(n).getSex().equals(Sex.FEMALE)) s="ж";
        System.out.println(allPeople.get(n).getName()+" "+s+" "+dateOut.format(allPeople.get(n).getBirthDay()));
    }

    public static synchronized void addPeople(String[] args) throws ParseException
    {
        SimpleDateFormat date=new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH);
        if (args[2].equals("м"))
        {
            allPeople.add(Person.createMale(args[1], date.parse(args[3])));
        } else if(args[2].equals("ж"))
            allPeople.add(Person.createFemale(args[1], date.parse(args[3])));
        System.out.println(allPeople.size()-1);
    }
    public static Sex sexChange(String a)
    {
        return (a.equals("м")) ? Sex.MALE : Sex.FEMALE;
    }

}
